﻿import com.dinmax.labonline.*

class LabManager{
	static var albums:Array; //array de Album
	static var _efectos:Array=new Array();
	static var _log:Boolean=false;
	static var _data:String;
	static var _accion:Number=0;
	static var _pedidos:Array=new Array(); //array de Pedido
	static var _formatos:Array=new Array();
	static var _formaspago:Array=new Array();

	public static var _usuario:Usuario;	
	
	static var ACCION_LOGIN:Number=1;
	static var ACCION_ALBUM:Number=2;	
	static var ACCION_EFECTO:Number=3;
	static var ACCION_FOTO:Number=4;
	static var ACCION_FORMAPAGO:Number=5;	
	static var ACCION_FORMATO:Number=6;
	static var ACCION_PEDIDO:Number=7;	
	
	
	public static function refreshAcordion(){
		
	}
	public static function newData(data:String):Void{
		_data=data;
		

		switch (_accion) {
			case ACCION_LOGIN:
 				processLogin();
			break;
			case ACCION_ALBUM:
				processAlbum();
			break;
			case ACCION_EFECTO:
				processEfecto();
			break;
			case ACCION_FOTO:
				processFoto();
			break;			
			case ACCION_FORMAPAGO:
				processFormaPago();
			break;			
			case ACCION_FORMATO:
				processFormato();
			break;
			case ACCION_PEDIDO:
				processPedido();
			break;			
				
		}
		//_accion=0;
		
	}
	
public static function processPedido():Void	{
		
			var arr:Array;
			var _error:String;
			
			var pedido:Pedido;
			arr=_data.split("\n");
			for (var i:Number=0;i<arr.length;i++) {
			 	var arr2:Array=arr[i].split("|");	

				 //Error			 
				 if (arr2[0]=="0") {			 
					_error=arr2[1].split(":")[1];
					break;
				 }
				 //Pedido
				 if (arr2[0]=="4") {
					 pedido=new Pedido();
					 pedido.setId(arr2[1]);
					 pedido.setFecha(arr2[2]);
					 pedido.setEstado(arr2[3]);
					 pedido.setFormaPago(LabManager.findFormaPago(arr2[4]));					 
					 _pedidos.push(pedido);
				 }
				 //Item
				 if (arr2[0]=="5") {
					 var ip:ItemPedido=new ItemPedido();
					 ip.setId(arr2[1]);
					 ip.setFoto(LabManager.getFoto(arr2[2]));
					 ip.setFormato(LabManager.findFormato(arr2[3]));					 
					 ip.setCopias(arr2[4]);
					 pedido.addItemPedido(ip);
					 
				 }				 
			}
			Evento(_error);		
	}
	
public static function processFormaPago():Void	{
		
			var arr:Array;
			var _error:String;
			var album:Album;
			arr=_data.split("\n");
			for (var i:Number=0;i<arr.length;i++) {
			 	var arr2:Array=arr[i].split("|");	

				 //Error			 
				 if (arr2[0]=="0") {			 
					_error=arr2[1].split(":")[1];
					break;
				 }
				 //Album
				 if (arr2[0]=="6") {
					 var formapago=new FormaPago();
					 formapago.setId(arr2[1]);
					 formapago.setNombre(arr2[2]);					 
					 _formaspago.push(formapago);
				 }				 
			}

			Evento(_error);		
	}
	
	public static function processFormato():Void	{
		
			var arr:Array;
			var _error:String;
			var album:Album;
			arr=_data.split("\n");

			for (var i:Number=0;i<arr.length;i++) {
			 	var arr2:Array=arr[i].split("|");	
				

				 //Error			 
				 if (arr2[0]=="0") {			 
					_error=arr2[1].split(":")[1];
					break;
				 }
				 //Album
				 if (arr2[0]=="7") {
					 var formato:Formato=new Formato();
					 formato.setId(arr2[1]);
					 formato.setNombre(arr2[2]);
					 formato.setPapel(arr2[3]);
					 formato.setPrecio(arr2[4]);					 
					 formato.setAncho(arr2[5]);
					 formato.setAlto(arr2[6]);					 
					 _formatos.push(formato);
				 }				 
			}

			Evento(_error);
		
	}
	
	public static function processFoto():Void	{
		
			var arr:Array;
			var _error:String;
			var album:Album;
			arr=_data.split("\n");
			for (var i:Number=0;i<arr.length;i++) {
			 	var arr2:Array=arr[i].split("|");	
				 //Error			 
				 if (arr2[0]=="0") {			 
					_error=arr2[1].split(":")[1];
					break;
				 }
				 //Album
				 if (arr2[0]=="3") {
					 var foto=new Foto();
					 foto.setId(arr2[1]);
					 foto.setNombre(arr2[2]);
					 foto.setDescripcion(arr2[3]);				
					 foto.setFecha(arr2[4]);
					 foto.setAncho(arr2[5]);
					 foto.setAlto(arr2[6]);				 
					 foto.setColores(arr2[7]);				
					break;
				 }				 
			}
			
			EventoFoto(foto,_error);
		
	}
	
	public static function processAlbum():Void	{

			var arr:Array;
			var _error:String;
			var album:Album;
			arr=_data.split("\n");
			for (var i:Number=0;i<arr.length;i++) {
			 	var arr2:Array=arr[i].split("|");	
				 //Error			 
				 if (arr2[0]=="0") {			 
					_error=arr2[1].split(":")[1];
					break;
				 }
				 //Album
				 if (arr2[0]=="2") {
				    album=new Album();
					album.setId(arr2[1]);					
					album.setNombre(arr2[2]);
					album.setDescripcion(arr2[3]);					
					album.setFecha(arr2[4]);
					_usuario.addOrReplace(album);
					break;
				 }				 
			}
			
			EventoAlbum(album,_error);
	}

	public static function processEfecto():Void	{
					_usuario=new Usuario();
			var arr:Array;
			var _error:String;
			var foto:Foto
			arr=_data.split("\n");
			
			for (var i:Number=0;i<arr.length;i++) {
			 var arr2:Array=arr[i].split("|");	
			 //Error			 
			 if (arr2[0]=="0") {			 
			 	_error=arr2[1].split(":")[1];
				break;
			 }
			 //Foto
			 if (arr2[0]=="3") {
				 foto=new Foto();
				 foto.setId(arr2[1]);
				 foto.setNombre(arr2[2]);
				 foto.setDescripcion(arr2[3]);				
				 foto.setFecha(arr2[4]);
				 foto.setAncho(arr2[5]);
				 foto.setAlto(arr2[6]);				 
				 foto.setColores(arr2[7]);				 				 

				 
			 }
			}						
			if (_error==undefined) addEfecto(foto);
			EventoFoto(foto,_error);
	}
	
	public static function processLogin():Void	{
			_usuario=new Usuario();
			var arr:Array;
			var _error:String;
			arr=_data.split("\n");
			for (var i:Number=0;i<arr.length;i++) {
			 var arr2:Array=arr[i].split("|");	
			 
			 
			 //Error			 
			 if (arr2[0]=="0") {			 
			 	_error=arr2[1].split(":")[1];
				break;
			 }
			 //Usuario			 
			 if (arr2[0]=="1") {
				_usuario.setId(arr2[1]);
				_usuario.setNombre(arr2[3]);
				_usuario.setApellido(arr2[2]);				
				_usuario.setDireccion(arr2[4]);				
				_usuario.setFechaAlta(arr2[5]);								
			 }
			 //Album			 
			 if (arr2[0]=="2") {
				 var album:Album=new Album();
				 album.setId(arr2[1]);
				 album.setNombre(arr2[2]);
				 album.setDescripcion(arr2[3]);				
				 album.setFecha(arr2[4]);
				 
				 _usuario.addAlbum(album);
			 }
			 //Foto
			 if (arr2[0]=="3") {
				 var foto:Foto=new Foto();
				 foto.setId(arr2[1]);
				 foto.setNombre(arr2[2]);
				 foto.setDescripcion(arr2[3]);				
				 foto.setFecha(arr2[4]);
				 foto.setAncho(arr2[5]);
				 foto.setAlto(arr2[6]);				 
				 foto.setColores(arr2[7]);				 				 
				 album.addFoto(foto);
				 
			 }
			}						

			EventoLogin(_usuario,_error);
	}
	
	
	public static function getUsuario():Usuario{
		return _usuario;
	}
// --------------------------------------------------------------------------------
//  ALBUM
// --------------------------------------------------------------------------------
	public static function getAlbums():Array{
		return _usuario.getAlbums();
	}

	static function getAlbum(_id:Number):Album{
	var _arr:Array=_usuario.getAlbums();
	for (var i:Number=0;i<_arr.length;i++) {
		var a=_arr[i];
		if (a.getId()==_id) {
			return a;
		}
	}
		var pepe:Album=new Album();
		return pepe;
	}
	static function createAlbum(_nombre:String, _descripcion:String){
		_accion=ACCION_ALBUM
		Comunicacion.addAlbum(_nombre,_descripcion);
	}
	static function deleteAlbum(_album:Album){
		_accion=ACCION_ALBUM
		_usuario.removeAlbum(_album);
		Comunicacion.deleteAlbum(_album);		
	}
	static function modifyAlbum(_album:Album){
		_accion=ACCION_ALBUM
		Comunicacion.modifyAlbum(_album);
	}
	
// --------------------------------------------------------------------------------
//  FOTO
// --------------------------------------------------------------------------------	
	static function addFoto(_path:String, _album:Album):Foto{
		var pepe:Foto=new Foto();
		return pepe;
	}
	public static function removeFoto(_foto:Foto){
		_accion=ACCION_FOTO;
		_usuario.removeFoto(_foto.getId());
  		Comunicacion.borrarFoto(_foto);
	}
	
	static function moveFoto(_foto:Foto, _album:Album) {
	 	_accion=ACCION_FOTO;
		_usuario.removeFoto(_foto.getId());
		_album.addFoto(_foto);
		Comunicacion.moveFoto(_foto,_album);
		
	}


	static function getFoto(_id:Number):Foto{
	var _arr:Array=_usuario.getAlbums();
	for (var i:Number=0;i<_arr.length;i++) {		
		var a=_arr[i].getFotos();
		for (var o:Number=0;o<a.length;o++) {
		if (a[o].getId()==_id) {
			return a[o];
		}
		}
	}
	}
	
	static function getSmallFoto(_foto:Foto):String{
		return Comunicacion.getFotoChica(_foto);
	}
	static function getLargeFoto(_foto:Foto):String{
		return Comunicacion.getFotoGrande(_foto);
	}
	
	static function addUploadFoto(fotoData:String, album:Album){
				 var arr2:Array=fotoData.split("|");					 
				 var foto:Foto=new Foto();
				 foto.setId(arr2[1]);
				 foto.setNombre(arr2[2]);
				 foto.setDescripcion(arr2[3]);				
				 foto.setFecha(arr2[4]);
				 foto.setAncho(arr2[5]);
				 foto.setAlto(arr2[6]);				 
				 foto.setColores(arr2[7]);				 				 
				 album.addFoto(foto);
	}
// --------------------------------------------------------------------------------
//  Efectos
// --------------------------------------------------------------------------------
	
	static function efectoFoto(_foto:Foto, _efecto:Efecto):Void{
		_accion=ACCION_EFECTO;
		Comunicacion.aplicarEfecto(_foto,_efecto);
	}
	
	static function addEfecto(foto:Foto):Void {
		_efectos.push(foto);		
	}
	static function clearEfectos():Void {
		_efectos.splice(0);
	}
	static function removeEfectoFrom(indice:Number):Void {
		_efectos.splice(indice);
	}
	static function getEfectos():Array{
		return _efectos;
	}
	
// --------------------------------------------------------------------------------
//  Eventos
// --------------------------------------------------------------------------------
	
	static function EventoFoto(_foto:Foto,_error:String) {
		
	}
	
	static function EventoLogin(_user:Usuario,_error:String) {
		
	}
	static function EventoAlbum(_album:Album,_error:String) {
		
	}

	static function Evento(_error:String) {
		
	}

// --------------------------------------------------------------------------------
//  Auxiliares
// --------------------------------------------------------------------------------

	static function getFormatos():Array {
		_data="";
		_accion=ACCION_FORMATO;


		if (_formatos.length==0) {

			Comunicacion.getFormatos();			
		} else {
			return _formatos;			
		}		
	}
		
	static function getFormaPago():Array {
		_data="";
		_accion=ACCION_FORMAPAGO;			
		if (_formaspago.length==0) {
			Comunicacion.getFormaPago();
		} else {
			return _formaspago;			
		}
		
	}
	
	static function findFormaPago(id:Number):FormaPago {

		for (var i:Number=0;i<_formaspago.length;i++) {
			var fp:FormaPago=_formaspago[i];

			if (fp.getId()==id) {
				return fp;
			}
			
		}
	}

	static function findFormato(id:Number):Formato {
		for (var i:Number=0;i<_formatos.length;i++) {
			var fp:Formato=_formatos[i];
			if (fp.getId()==id) {
				return fp;
			}
			
		}
	}
// --------------------------------------------------------------------------------
//  Acciones
// --------------------------------------------------------------------------------
	
	static function login(_usuario:String, _password:String,devolveme:Function){
		
			_data="";
			_accion=ACCION_LOGIN;
			Comunicacion.login(_usuario,_password);

	}
	
	static function logout(){
		
	}
	static function isLogin():Boolean{
		return _log;
	}
	
// --------------------------------------------------------------------------------
//  PEDIDO
// --------------------------------------------------------------------------------
	static function crearPedido(_pedido:Pedido){
		_data="";
		_accion=ACCION_PEDIDO;		
		Comunicacion.newPedido(_pedido);
	}
	
	static function deletePedido(_pedido:Pedido){
		_data="";
		_accion=ACCION_PEDIDO;
		trace("delete pedido en LabManager");
	}
	
	static function getPedidos():Array{
		_data="";
		_accion=ACCION_PEDIDO;
		if (_pedidos.length==0) {
			Comunicacion.getPedidos();						
		} else {
			return _pedidos;			
		}		
	}
	
} //fin de clase